package com.skt.domain.DTO.request;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.time.LocalDate;
import java.util.List;

/**
 * 创建租赁订单请求参数
 */
@Data
@Accessors(chain = true)
@Schema(description = "创建租赁订单请求参数")
public class OrderCreateRequest {

    /**
     * 租赁开始日期（必须 >= 当天）
     */
    @NotNull(message = "租赁开始日期不能为空")
    @Schema(description = "租赁开始日期", example = "2025-12-01")
    private LocalDate startDate;

    /**
     * 租赁结束日期（必须 > 开始日期）
     */
    @NotNull(message = "租赁结束日期不能为空")
    @Schema(description = "租赁结束日期", example = "2025-12-05")
    private LocalDate endDate;

    /**
     * 收货地址ID（关联用户地址簿）
     */
    @NotNull(message = "收货地址不能为空")
    @Min(value = 1, message = "地址ID无效")
    @Schema(description = "收货地址ID", example = "1001")
    private Long addressId;

    /**
     * 订单备注（可选）
     */
    @Schema(description = "订单备注", maxLength = 200)
    @Size(max = 200, message = "备注长度不能超过200字符")
    private String remark;

    /**
     * 订单明细列表（至少一项）
     */
    @NotEmpty(message = "订单商品列表不能为空")
    @Valid
    @Schema(description = "租赁商品明细列表")
    private List<OrderItemRequest> items;

    /**
     * 单个商品租赁项
     */
    @Data
    @Accessors(chain = true)
    @Schema(description = "订单商品明细")

    public static class OrderItemRequest {

        /**
         * 服装商品ID
         */
        @NotNull(message = "服装ID不能为空")
        @Min(value = 1, message = "服装ID无效")
        @Schema(description = "服装商品ID", example = "5001")
        private Long costumeId;

        /**
         * 租赁数量（通常为1，但支持多件同款）
         */
        @NotNull(message = "数量不能为空")
        @Min(value = 1, message = "数量至少为1")
        @Max(value = 10, message = "单次租赁数量不能超过10")
        @Schema(description = "租赁数量", example = "1")
        private Integer quantity;
    }
}